Programmable integrated circuits (ICs) with different capabilities are widely available. Generally, programmable ICs are devices that can be programmed to perform specified logic functions. A programmable IC may include programmable logic or a combination of programmable logic and hardwired logic, such as one or more microprocessors. One type of programmable IC, the field programmable gate array (FPGA), typically includes an array of programmable tiles. These programmable tiles comprise various types of logic blocks, which can include, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing blocks (DSPs), processors, clock managers, delay lock loops (DLLs), bus or network interfaces such as Peripheral Component Interconnect Express (PCIe) and Ethernet and so forth.
Each programmable tile may include both programmable interconnect and programmable logic. The programmable interconnect typically includes a large number of interconnect lines of varying lengths interconnected by programmable interconnect points (PIPs). The programmable logic implements the logic of a user design using programmable elements that can include, for example, function generators, registers, arithmetic logic, and so forth.
The programmable interconnect and programmable logic are typically programmed by loading a configuration data stream into internal configuration memory cells that define how the programmable elements are configured. The configuration data can be read from memory (e.g., from an external PROM) or written into the FPGA by an external device. The collective states of the individual memory cells then determine the function of the FPGA.
Some programmable ICs include one or more microprocessors that are capable of executing program code. The microprocessor can be fabricated as part of the same die that includes the programmable logic circuitry and the programmable interconnect circuitry, also referred to collectively as the “programmable circuitry” of the IC. It should be appreciated that execution of program code within a microprocessor is distinguishable from “programming” or “configuring” the programmable circuitry that may be available on an IC. The act of programming or configuring programmable circuitry of an IC results in the implementation of different physical circuitry as specified by the configuration data within the programmable circuitry.
A system on chip (SOC) is an example of a programmable IC. An SOC may include a micro-processor, programmable logic, on-chip memory, various input/output (I/O) circuitry, and interconnect circuits for communicating between the micro-processor, programmable logic, and I/O circuitry.
Although the integration of multiple functions on a single SOC may support a wide variety of applications and provide great flexibility, the quantity of resources providing particular functional circuitry on the SOC may be less than the quantity of resources available if that particular functional circuitry were implemented on a separate IC die. For example, an SOC may have fewer programmable logic resources than a dedicated FPGA IC die. Similarly, an SOC having one or more microprocessors, on-chip memory, and programmable logic, may have fewer on-chip memory resources than another SOC having microprocessors, on-chip memory, and no programmable logic. Some applications may benefit from a greater quantity of on-chip memory than a particular SOC has available. To accommodate a need for more on-chip memory, a designer may look for an SOC having greater on-chip memory resources. However, an SOC having more on-chip memory may be more expensive than another SOC having less on-chip memory, leaving the designer to choose between less performance at a reduced cost or greater performance at a greater cost.